﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

using Gman.Entity.Entities;
using Gman.WebApp.ServiceControllers;
using Gman.WebApp.Models;
using System.Web.Caching;
using Gman.WebApp.Controllers.Base;
using System.Web.UI;

using System.IO;

namespace Gman.WebApp.Controllers
{
    public class SistemaController : BaseController
    {
        private OperacionServiceController service = new OperacionServiceController();

        public ActionResult Search()
        {
            BienBE bien = new BienBE();
            var model = new SistemaModel(bien);

            model.Action = "search";
            model.ToolBar = new ToolBarModel();

            return View(@"~/Views/Sistema/Edit.aspx", model);
        }


        public ActionResult DoSearch(string cod)
        {
            var cache = new CacheProvider();

            BienBE obj = new BienBE();
            obj.CodBien = cod;

            var bien = service.ObtenerSistema(obj);



            if (bien != null)
            {
                var model = new SistemaModel(bien);
                cache.Set(model.ID.Value.ToString(), model);
                model.Action = "create";
                model.ToolBar = new ToolBarModel();


                Int64 IDSistema = Convert.ToInt64(model.Bien.IDBien);
                TempData["IDSistema"] = IDSistema;

                //model.Seleccionados = new List<BienBE>();

                IList<DetalleBienBE> listaSeleccionados = new List<DetalleBienBE>();
                DetalleBienBE detalle = new DetalleBienBE();
                detalle.IdSistema = Convert.ToInt64(TempData["IDSistema"]);
                listaSeleccionados = service.ListarSistema(detalle);

                foreach (DetalleBienBE diagnosticos in listaSeleccionados)
                {

                    BienBE data = new BienBE();

                    BienBE bienes = new BienBE();
                    bienes.IDBien = diagnosticos.IdBien;
                    data= service.ObtenerBienxID(bien);

                    model.Seleccionados.Add(data);

                }

                return View(@"~/Views/Sistema/Edit.aspx", model);
            }

            return AjaxResultSuccess(string.Format("No se encontró bien :{0} ", cod));
        }



        private IList<BienBE> ListaActivos( BienBE bien)
        {
           

            IList<BienBE> lista = new List<BienBE>();
            lista = service.BuscarActivos(bien);
            return lista;
        }

        private BienBE ObtenerActivos(BienBE bien)
        {
            bien = service.ObtenerBien(bien);
            return bien;
        }


        public ActionResult BuscarActivos(String cod, String des)
        {
            var cache = new CacheProvider();

            BienBE obj = new BienBE();
            obj.CodBien = cod;
            obj.DescBien = des;
            obj.IDEmp = 1;

            var bien = ListaActivos(obj);

            if (bien != null)
            {
                var model = new SistemaModel(bien,false);
                cache.Set(model.ID.Value.ToString(), model);
                model.Action = "create";
                model.ToolBar = new ToolBarModel();

                return View(@"~/Views/Sistema/ListaActivos.ascx", model);
            }

            return AjaxResultError(string.Format("No se encontró bien :{0} ", cod));
        }



        public SistemaModel GetSistemaModel(Guid id)
        {
            var cache = new CacheProvider();

            string key = id.ToString();
            var existingModel = cache.Get(key);
            if (existingModel == null)
            {
                existingModel = new SistemaModel(new BienBE());
                cache.Set(key, existingModel);
            }
            return (SistemaModel)existingModel;
        }


        //public ActionResult AddOrEditActivo(Guid id,String cod)
        public ActionResult AddOrEditActivo(Guid id, String cod, String action)
        {
            try
            {
                BienBE obj = new BienBE();
                obj.CodBien = cod;

                var activo = ObtenerActivos(obj);
                var model = GetSistemaModel(id);
                bool estado = true;
                if (action == "create" || action =="query")
                {
                    if (model.Seleccionados.Count >= 1)
                    {


                        foreach (var existe in model.Seleccionados)
                        {
                            if (activo.IDBien == existe.IDBien)
                            {
                                estado = false;
                            }

                            //if (activo.BajaActivoDetalle.Bien.IDBien == existe.BajaActivoDetalle.Bien.IDBien)
                            //{
                            //    estado = false;
                            //}

                        }

                        if (estado)
                        {
                            //activo.IDBien = 0;
                            model.Seleccionados.Add(activo);
                        }

                    }
                    else
                    {
                        //activo.IDBien= 0;
                        model.Seleccionados.Add(activo);
                    }

                }

                else if (action == "edit")
                {
                    //var activoToEdit = model.Seleccionados.FirstOrDefault(x => x.ID == activoGuid);
                    //activoToEdit = activo;
                }

                return AjaxResultSuccessNoParam();
            }
            catch (Exception ex)
            {
                return AjaxResultError(ex.Message);
            }
            
        }


        public ViewResult GetListaActivo(Guid id)
        {
            SistemaModel model = GetSistemaModel(id);
            return View(@"~/Views/Sistema/ListaActivosDetalle.ascx", model);
        }



        public ActionResult Create()
        {
            var cache = new CacheProvider();
            BienBE sistema = new BienBE();

            var model = new SistemaModel(sistema);
            cache.Set(model.ID.Value.ToString(), model);
            model.Action = "create";
            model.ToolBar = new ToolBarModel();

            return View(@"~/Views/Sistema/Edit.aspx", model);
        }


        public JsonResult Save(Guid id, string action)
        {
            try
            {
                UsuariosBE user = (UsuariosBE)Session["user"];
                SistemaModel model = GetSistemaModel(id);
                BienBE obj = new BienBE();

                List<BienBE> ListSeleccionados = new List<BienBE>();
                foreach (var select in model.Seleccionados)
                {
                    //select.IDBien = select.IDBien;
                    ListSeleccionados.Add(select);
                }

                List<BienBE> Listeliminados = new List<BienBE>();
                foreach (var eliminados in model.toDelete)
                {
                    Listeliminados.Add(eliminados);
                }


                if (model.Action == "create")
                {

                    DetalleBienBE sistema = new DetalleBienBE();
                    var IDSistema = model.Bien.IDBien;
                    sistema.IdSistema = IDSistema;

                    int resultado = service.RegistrarSistema(sistema, ListSeleccionados);

                    if (resultado == 0)
                    {
                        //TempData["IDDiagnostico"] = codDiag;
                        return AjaxResultSuccess(string.Format("Sistema {0} se guardo exitosamente.", model.Bien.CodBien));
                    }
                    else
                    {
                        return AjaxResultSuccess(string.Format("No se guardo exitosamente."));
                    }

                }
                if (model.Action == "edit")
                {
                    //DiagnosticoBE diagnostico = new DiagnosticoBE();
                    //diagnostico = model.Diagnostico;
                    //diagnostico.TermCnxMod = Environment.MachineName;
                    //diagnostico.UsuMod = user.NomUsu;

                    //int codDiag = service.ActualizarDiagnostico(diagnostico, ListDiagnosticos, Listeliminados);

                    //if (codDiag >= 1)
                    //{
                    //    //TempData["IDDiagnostico"] = codDiag;
                    //    return AjaxResultSuccess(string.Format("Diagnostico {0} se actualizo exitosamente.", diagnostico.CodDiag));

                    //}
                    //else
                    //{
                    //    return AjaxResultSuccess(string.Format("No se guardo exitosamente."));
                    //}
                }



                return AjaxResultSuccessNoParam();

            }
            catch (Exception ex)
            {
                return AjaxResultError(ex.Message);
            }
        }


    }
}
